R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介)

您所在的位置:网站首页 linux 并行运算 R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介)

R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介)

2024-07-10 06:40| 来源: 网络整理| 查看: 265

终于开始攻克并行这一块了,有点小兴奋,来看看网络上R语言并行办法有哪些:

赵鹏老师(R与并行计算)做的总结已经很到位。现在并行可以分为:

隐式并行:隐式计算对用户隐藏了大部分细节,用户不需要知道具体数据分配方式 ,算法的实现或者底层的硬件资源分配。系统会根据当前的硬件资源来自动启动计算核心。显然,这种模式对于大多数用户来说是最喜闻乐见的。

显性并行:显式计算则要求用户能够自己处理算例中数据划分,任务分配,计算以及最后的结果收集。因此,显式计算模式对用户的要求更高,用户不仅需要理解自己的算法,还需要对并行计算和硬件有一定的理解。值得庆幸的是,现有R中的并行计算框架,如parallel (snow,multicores),Rmpi和foreach等采用的是映射式并行模型(Mapping),使用方法简单清晰,极大地简化了编程复杂度。R用户只需要将现有程序转化为*apply或者for的循环形式之后,通过简单的API替换来实现并行计算。

简单总结就是:

隐式并行:OpenBLAS,Intel MKL,NVIDIA cuBLAS,H2O(参考我的博客)等

显性并行:parallel(主打lapply应用)、foreach(主打for循环)、SupR、还有利用GPU的办法(gpuR)

同时并行时对内存的消耗极大,超级容易爆发内存问题,而且R的内存问题一直都是R很难解决的问题,这边笔者也把看到的一些方式列出来。

当然在使用一些高大上的并行包以及框架之前,如果你能够从编码小细节优化,效率也能提高很多,譬如:

代码语言:javascript复制方法:速度, nrow(df)/time_taken = n 行每秒 原始方法:1X, 856.2255行每秒(正则化为1) 向量化方法:738X, 631578行每秒 只考虑真值情况:1002X,857142.9行每秒 ifelse:1752X,1500000行每秒 which:8806X,7540364行每秒 Rcpp:13476X,11538462行每秒 apply处理并行

——————————————————————————————————————————————————————

在最后笔者在实践中遇到的问题,进行对应的解决:

应用一:使用parallel包时,能不能clusterExport整个函数呢?应用二:在使用parallel包时,报错:Error in unserialize(node$con) : error reading from connection

——————————————————————————————————

一、parallel包的使用方法

多数内容参考:R语言并行化基础与提高

parallel是base包,所以不用install.packages就可以直接调用。

原理:是利用CPU的核心进行训练。

应用场景:跟apply族(lapply/sapply效果一致)(

R语言︱数据分组统计函数族——apply族用法与心得

1、使用步骤

设置核心数:no_cores



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3